# 闭包：两个函数嵌套，内部函数用到外部函数的参数

# def a(args):
#     def b():
#         print(args)
#
#     return b
#
#
# result = a(1)
# result()
# def test():
#     print("test")


# test()

# t = test
# t()
# test()

# 闭包
def log(f):
    def fun(*args, **kwargs):
        print("1")
        f(args, kwargs)
        print("2")
    return fun


@log  # login = log(login)
def login(a, b):
    print("登录逻辑")

# login(1, 2)
login(1, 2)
# 需求：
#   1.在登录逻辑之前，之后各打印一条日志
#   2.在不改登录函数的代码前提，怎么实现
#   3.在不改登录函数,不改变调用的代码前提，怎么实现

# 开放封闭原则： 已经代码实现的代码不动，对外扩展功能
